package br.com.crud;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;

import br.com.modelo.Cliente;
import br.com.utilitario.Conexao;

public class ClienteCrud {

	private Connection connection;

	public void incluirCliente(String nomeCliente, String tipo, String cpfCnpj) {
		try {

			PreparedStatement ps = connection
					.prepareStatement("INSERT INTO CLIENTES (nome, tipo , documento) "
							+ "VALUES (?,?,?)");
			ps.setString(1, nomeCliente);
			ps.setString(2, tipo);
			ps.setString(3, cpfCnpj);
			ps.execute();
			
			System.out.print("Cliente inserido com sucesso");
		} catch (SQLException e) {
			System.out.print("Erro ao tentar incluir cliente.");
		}

	}
	
	public int getMaxId(){
		PreparedStatement  ps = null ;
		int max = 0 ;
		try {
			ps = connection.prepareStatement("SELECT MAX(codigo) FROM CLIENTES");
			ResultSet rs = ps.executeQuery();
			rs.next() ;
			max = rs.getInt(1);
			rs.close();
			ps.close();
		} catch (SQLException e) {
			System.out.print("Falha ao recuperar os dados.");
			e.printStackTrace();
		}
		return ++max;
	}

	public void alterarCliente(String nomeCliente, String tipo, String cpfCnpj,
			int codigo) {
		PreparedStatement ps;
		try {
			ps = connection.prepareStatement("UPDATE CLIENTES "
					+ "SET nome = ? ," + "   tipo = ? , " + "   documento = ? "
					+ " WHERE  " + "   codigo = ?");

			ps.setString(1, nomeCliente);
			ps.setString(2, tipo);
			ps.setString(3, cpfCnpj);
			ps.setInt(4, codigo);
			ps.execute();
			System.out.print("Cliente alterado com sucesso.");
		} catch (SQLException e) {
			System.out.print("Erro ao tentar alterar dos dados cliente.");
			e.printStackTrace();
		}

	}

	public void removerCliente(int codigo) {
		try {
			PreparedStatement ps = connection
					.prepareStatement("DELETE FROM CLIENTES WHERE codigo = ?");
			ps.setInt(1, codigo);
			ps.execute();

			System.out.print("Cliente removido com sucesso.");
		} catch (SQLException e) {
			System.out.print("Erro ao tentar remover dos dados cliente.");
			e.printStackTrace();
		}

	}

	public List<Cliente> lerDados() {
		List<Cliente> listaRetorno =  new LinkedList<Cliente>() ;
		PreparedStatement ps;
		try {
			ps = connection.prepareStatement("SELECT * FROM CLIENTES");
			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				listaRetorno.add(
						new Cliente(
								rs.getInt(1), 
								rs.getString(2),
								rs.getString(3), 
								rs.getString(4))) ;
				
			}
			rs.close();
			ps.close();
		} catch (SQLException e) {
			System.out.print("Falha ao recuperar os dados.");
			e.printStackTrace();
		}
		
		return listaRetorno ;

	}

	public ClienteCrud(Connection connection) {
		super();
		this.connection = connection;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Conexao c = new Conexao();
		
		Connection conecta = c.conecta(
				"localhost"
				, "5432" 
				, "exemplo"
				, "postgres"
				,"102033");
		
		ClienteCrud clienteCrud = new ClienteCrud(conecta);
		//clienteCrud.inlcuirCliente("Clienhte Novo", "PF", "45612378900");
		System.out.print(clienteCrud.getMaxId());
		

	}

}
